#pragma once
#include<iostream>
#include<unordered_map>
#include<functional>
#include<ctime>
using task_t=std::function<void()>;
//任务
void DownLoad()
{
    std::cout<<"正在下载......"<<std::endl;
}
void Log()
{
    std::cout<<"正在上传日志....."<<std::endl;
}
void Sql()
{
    std::cout<<"正在同步数据库数据....."<<std::endl;
}
//任务对象，一个任务要求有任务号和任务内容
class TaskManager
{
public:
    static int number;//用于记录任务数
    TaskManager()
    {
        srand(time(nullptr));
        Insert(DownLoad);
        Insert(Log);
        Insert(Sql);
    }
    void Insert(task_t task)
    {
        _tasks[number++]=task;
    }

    void Excute(int number)
    {
        if(_tasks.find(number)==_tasks.end()) return;
        _tasks[number]();
    }
    int Select()
    {
        return rand()%number;
    }
    ~TaskManager()
    {}
private:
    std::unordered_map<int,task_t> _tasks;
};
int TaskManager::number=0;//初始化类中静态变量
TaskManager tm;